#ifndef DECK_H
#define DECK_H

/************************************************************************/
/* Classe Deck
/* Defini��es da classe que representa uma lista de cartas.
/************************************************************************/

#include <vector>
#include "Card.h"

class Deck
{
public:
    
	/** Construtor */
	Deck();

	/** Destrutor */
	~Deck();

	/**
	 * Adiciona uma carta ao topo da lista
	 * @param[in] card Carta a ser adicionada
	 */
    void insert( Card* card );

	/**
	 * Remove uma carta do topo da lista
	 * @return Carta removida
	 */
    Card* remove();

	/** 
	 * Embaralha o deck
	 */
    void shuffle();

	/** 
	 * Preeche o deck com as 52 cartas do baralho
	 */
	void fill();

	/** 
	 * Retorna o numero de cartas do deck
	 */
    int getSize();

protected:

	/** Vetor com as cartas do deck */
	std::vector<Card*> _deck;

private:

    /**
     * Troca a posição de dois elementos do vetor.
     */
    void swap( int pos1, int pos2 );

    /**
     * Retorna um número aleatório entre 0 e limit.
     */
    int randLim( int limit );
};

#endif  //_DECK_H
